import java.util.Arrays;

/**
 * 面试题 16.11. 跳水板
 * https://leetcode-cn.com/problems/diving-board-lcci/
 */
public class Solutions_mianshi_16_11 {
    public static void main(String[] args) {
//        int shorter = 1, longer = 2, k = 3;  // output: {3, 4, 5, 6}
        int shorter = 3, longer = 3, k = 3;  // output: {9}

        int[] result = divingBoard(shorter, longer, k);
        System.out.println(Arrays.toString(result));
    }

    public static int[] divingBoard(int shorter, int longer, int k) {
        // 共有 k + 1 种排列方法
        if (k == 0) {
            return new int[0];
        }
        if (shorter == longer) {
            return new int[]{shorter * k};
        }
        int count = k + 1;
        int[] res = new int[count];
        for (int i = 0; i < count; i++) {
            // 每次都要使用 k 个，若短板使用了 i 个，那么长板就要使用 k - i 个
            // 如此保证计算得到的结果都不相同，且能够计算得到全部的结果长度
            // 长度 = 短板数量 * (k - i) (块) + 长板数量 * i (块)
            res[i] = shorter * (k - i) + longer * i;
        }
        return res;
    }
}
